import { api } from '@/utils/request'

export interface UserInfo {
  id: number
  idNumber: string
  username: string | null
  name: string
  birthDateFirst6: string
  withdrawalBank: string
  withdrawalAccount: string
  accountHolder: string
  mobileCarrier: string
  mobileNumber: string
  entryCode: string | null
  status: string
  tier: string
  createdAt: string
  updatedAt: string
}

export interface UpdateProfileData {
  // 基础信息
  name?: string
  birthDateFirst6?: string
  // 密码修改
  oldPassword?: string
  newPassword?: string
  // 银行账户
  withdrawalBank?: string
  withdrawalAccount?: string
  accountHolder?: string
  // 联系方式
  mobileCarrier?: string
  mobileNumber?: string
}

class UserApiService {
  /**
   * 获取当前用户信息
   */
  async getUserInfo(): Promise<UserInfo> {
    try {
      const response = await api.get<UserInfo>('/api/user/info')
      return response.data
    } catch (error) {
      console.error('사용자 정보 조회 실패:', error)
      throw new Error('사용자 정보를 불러오지 못했습니다')
    }
  }

  /**
   * 修改用户基础信息
   */
  async updateBasicInfo(data: {
    name?: string
    birthDateFirst6?: string
  }): Promise<UserInfo> {
    try {
      const response = await api.put<UserInfo>('/api/user/update', data)
      return response.data
    } catch (error: any) {
      console.error('기본 정보 수정 실패:', error)
      const errorMessage = error.response?.data?.message || '기본 정보 수정에 실패했습니다'
      throw new Error(errorMessage)
    }
  }

  /**
   * 修改密码
   */
  async updatePassword(data: {
    oldPassword: string
    newPassword: string
  }): Promise<void> {
    try {
      await api.put<void>('/api/user/update', data)
    } catch (error: any) {
      console.error('비밀번호 변경 실패:', error)
      const errorMessage = error.response?.data?.message || '비밀번호 변경에 실패했습니다'
      throw new Error(errorMessage)
    }
  }

  /**
   * 修改银行账户信息
   */
  async updateBankAccount(data: {
    withdrawalBank: string
    withdrawalAccount: string
    accountHolder: string
  }): Promise<UserInfo> {
    try {
      const response = await api.put<UserInfo>('/api/user/update', data)
      return response.data
    } catch (error: any) {
      console.error('계좌 정보 수정 실패:', error)
      const errorMessage = error.response?.data?.message || '계좌 정보 수정에 실패했습니다'
      throw new Error(errorMessage)
    }
  }

  /**
   * 修改手机号
   */
  async updateMobileNumber(data: {
    mobileCarrier: string
    mobileNumber: string
  }): Promise<UserInfo> {
    try {
      const response = await api.put<UserInfo>('/api/user/update', data)
      return response.data
    } catch (error: any) {
      console.error('휴대폰 번호 수정 실패:', error)
      const errorMessage = error.response?.data?.message || '휴대폰 번호 수정에 실패했습니다'
      throw new Error(errorMessage)
    }
  }

  /**
   * 通用更新方法（支持所有字段）
   */
  async updateProfile(data: UpdateProfileData): Promise<UserInfo> {
    try {
      const response = await api.put<UserInfo>('/api/user/update', data)
      return response.data
    } catch (error: any) {
      console.error('프로필 수정 실패:', error)
      const errorMessage = error.response?.data?.message || '프로필 수정에 실패했습니다'
      throw new Error(errorMessage)
    }
  }
}

export const userApiService = new UserApiService()
